package lambda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * lambda表达式，JDK8之后推出的特性
 * lambda表达式可以用更简洁的语法创建匿名内部类，目的是只突出核心逻辑，不用在赘述
 * 匿名内部类的创建语法。
 *
 * 语法:
 * (参数列表)->{
 *     逻辑代码
 * }
 * 需要注意:lambda表达式创建时实现的接口只能有一个抽象方法，否则无法使用lambda
 * java提供的结构，如果可以使用lambda表达式创建的，都被打了注解:@FunctionalInterface
 */
public class LambdaDemo1 {
    public static void main(String[] args) {
        //定义比较器
        Comparator<String> comparable = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.length() - o1.length();//字符从多到少
            }
        };

        //lambda表达式写法
        Comparator<String> c1 = (String o1, String o2)->{
                return o2.length() - o1.length();//字符从多到少
        };

        //参数的类型可以忽略不写，编译器会自动识别
        Comparator<String> c2 = (o1,o2)->{
            return o2.length() - o1.length();//字符从多到少
        };
        /*
            如果方法体只有一句代码，那么方法体的"{}"可以忽略不写，同时
            如果这句代码含有return关键字时，return关键字也要忽略
         */
        Comparator<String> c3 = (o1,o2)->o2.length()-o1.length();

        List<String> list = new ArrayList<>();
        list.add("王克晶");
        list.add("传奇");
        list.add("伟超老师");
        System.out.println(list);
        Collections.sort(list,(o1,o2)->o2.length()-o1.length());
        System.out.println(list);
    }
}






